1. /* sxfbsins.cpp by K.Tsuru */
  2. // function ID 5204 BRADIX
  3. #ifndef SN_H
  4. #include "sn.h"
  5. #endif
  6. /**************
  7. SDecimal class
  8. sin x by series
  9. ***************/
  10. SDecimal BsinSeries(const SDouble& x){
  11. SDecimal dx;
  12. dx = dx.ConvToBin(x); // radix conversion
  13. SDecimal sum(dx), xsq, delta;
  14. ulong n = 4, den, mt = sum.SlOpMaxValue();
  15. xsq = dx*dx;
  16. XsDiv(xsq, 6, delta);
  17. delta *= dx;
  18. XXSub(sum, delta, sum);
  19. while(delta.Sign()){
  20. den = n*(n+1);
  21. if(den >= mt) break;
  22. delta *= xsq; // DDMult() is used.
  23. XsDiv(delta, den, delta);
  24. if(n & 2) XXSub(sum, delta, sum);
  25. else XXAdd(sum, delta, sum);
  26. n += 2;
  27. }
  28. while(delta.Sign()){
  29. if(n >= mt){
  30. sum.SetError(sum.NOT_CONVERGE,"BsinSeries", -5204);
  31. break;
  32. }
  33. delta *= xsq;
  34. XsDiv(delta, n, delta);
  35. XsDiv(delta, n+1, delta);
  36. if(n & 2) XXSub(sum, delta, sum);
  37. else XXAdd(sum, delta, sum);
  38. n += 2;
  39. }
  40. sum.upToTerm = n/2;
  41. return sum;
  42. }

sxfbsins.cpp : last modifiled at 2015/12/15 14:00:42(967 bytes)
created at 2015/12/22 16:09:56
The creation time of this html file is 2017/10/27 15:45:59 (Fri Oct 27 15:45:59 2017).